/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sysdrive.DAO;

import br.com.sysdrive.model.MovimentacaoEstoque;
import br.com.sysdrive.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Boliviano
 */
public class MovimentacaoEstoqueDAOImpl implements GenericDAO {

    private Connection conn;
    private ResultSet rs;

    public MovimentacaoEstoqueDAOImpl() throws Exception {
        try {
            this.conn = ConnectionFactory.getConnection();
            System.out.println("Conectado com Sucesso!");
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }
    }

    @Override
    public Boolean cadastrar(Object object) {
        PreparedStatement stmt = null;
        MovimentacaoEstoque movimentacaoEstoque = (MovimentacaoEstoque) object;
        String sql = "insert into movimentacao_estoque (tipo_movimentacao_estoque, data_movimentacao_estoque, "
                + "qtd_movimentacao_estoque, valor_unitario_movimentacao_estoque, "
                + "valor_total_movimentacao_estoque, status_movimentacao_estoque, "
                + "id_funcionario) values (?,?,?,?,?,?,?);";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, movimentacaoEstoque.getTipoMovimentacaoEstoque().toUpperCase());
            stmt.setDate(2, new java.sql.Date(movimentacaoEstoque.getDataMovimentacaoEstoque().getTime()));            
            stmt.setDouble(3, movimentacaoEstoque.getQtdMovimentacaoEstoque());
            stmt.setDouble(4, movimentacaoEstoque.getValorUnitarioMovimentacaoEstoque());
            stmt.setDouble(5, movimentacaoEstoque.getValorTotalMovimentacaoEstoque());
            stmt.setString(6, movimentacaoEstoque.getStatusMovimentacaoEstoque().toUpperCase());
            stmt.setInt(7, movimentacaoEstoque.getFuncionario().getIdFuncionario());
            stmt.execute();
            return true;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao cadastrar MovimentacaoEstoque! Erro: " + ex.getMessage());
            ex.printStackTrace();
            return false;
        } catch (Exception ex) {
            System.out.println("Problemas ao cadastrar MovimentacaoEstoque! Erro MovimentacaoEstoqueDAO: " + ex.getMessage());
            ex.printStackTrace();
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão! Erro MovimentacaoEstoqueDAO: " + ex.getMessage());
            }
        }
    }

    @Override
    public List<Object> listar() {
        List<Object> resultado = new ArrayList<Object>();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        String sql = "select m.* "
                + "from movimentacao_estoque m;";
        try {
            stmt = conn.prepareStatement(sql);
            rs = stmt.executeQuery();
            while (rs.next()) {
                MovimentacaoEstoque movimentacaoEstoque = new MovimentacaoEstoque();
                movimentacaoEstoque.setIdMovimentacaoEstoque(rs.getInt("id_movimentacao_estoque"));
                movimentacaoEstoque.setTipoMovimentacaoEstoque(rs.getString("tipo_movimentacao_estoque"));
                movimentacaoEstoque.setDataMovimentacaoEstoque(rs.getDate("data_movimentacao_estoque"));
                movimentacaoEstoque.setQtdMovimentacaoEstoque(rs.getDouble("qtd_movimentacao_estoque"));
                movimentacaoEstoque.setValorUnitarioMovimentacaoEstoque(rs.getDouble("valor_unitario_movimentacao_estoque"));
                movimentacaoEstoque.setValorTotalMovimentacaoEstoque(rs.getDouble("valor_total_movimentacao_estoque"));                
                movimentacaoEstoque.setStatusMovimentacaoEstoque(rs.getString("status_movimentacao_estoque"));
                resultado.add(movimentacaoEstoque);
            }
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao listar MovimentacaoEstoque! Erro: " + ex.getMessage());
            ex.printStackTrace();
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão! Erro MovimentacaoEstoqueDAO: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
        return resultado;
    }

    @Override
    public Object carregar(int idObject) {
        PreparedStatement stmt = null;
        MovimentacaoEstoque movimentacaoEstoque = null;
        ResultSet rs = null;
        String sql = "select m.* from movimentacao_estoque m where id_movimentacao_estoque = ?";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1, idObject);
            rs = stmt.executeQuery();
            while (rs.next()) {
                movimentacaoEstoque = new MovimentacaoEstoque();              
                movimentacaoEstoque.setTipoMovimentacaoEstoque(rs.getString("tipo_movimentacao_estoque"));
                movimentacaoEstoque.setDataMovimentacaoEstoque(rs.getDate("data_movimentacao_estoque"));
                movimentacaoEstoque.setQtdMovimentacaoEstoque(rs.getDouble("qtd_movimentacao_estoque"));
                movimentacaoEstoque.setValorUnitarioMovimentacaoEstoque(rs.getDouble("valor_unitario_movimentacao_estoque"));
                movimentacaoEstoque.setValorTotalMovimentacaoEstoque(rs.getDouble("valor_total_conta_pagar"));                
                movimentacaoEstoque.setStatusMovimentacaoEstoque(rs.getString("status_movimentacao_estoque"));
                movimentacaoEstoque.setIdMovimentacaoEstoque(rs.getInt("id_movimentacao_estoque"));

            }
            return movimentacaoEstoque;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao Carregar MovimentacaoEstoque! Erro MovimentacaoEstoqueDAO: " + ex.getMessage());
            ex.printStackTrace();
            return null;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt, rs);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar os parâmetros de conexão Carregar MovimentacaoEstoque! Erro MovimentacaoEstoqueDAO: " + ex.getMessage());
                ex.printStackTrace();
            }
        }
    }

    @Override
    public Boolean alterar(Object object) {
        PreparedStatement stmt = null;
        MovimentacaoEstoque movimentacaoEstoque = (MovimentacaoEstoque) object;
        String sql = "update movimentacao_estoque set tipo_movimentacao_estoque = ?, data_movimentacao_estoque = ?, "
                + "qtd_movimentacao_estoque = ?,"
                + "valor_unitario_movimentacao_estoque = ?, valor_total_movimentacao_estoque = ?, status_movimentacao_estoque = ?"
                + "where id_movimentacao_estoque = ?";
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, movimentacaoEstoque.getTipoMovimentacaoEstoque().toUpperCase());
            stmt.setDate(2, new java.sql.Date(movimentacaoEstoque.getDataMovimentacaoEstoque().getTime()));
            stmt.setDouble(5, movimentacaoEstoque.getQtdMovimentacaoEstoque());
            stmt.setDouble(6, movimentacaoEstoque.getValorUnitarioMovimentacaoEstoque());
            stmt.setDouble(7, movimentacaoEstoque.getValorTotalMovimentacaoEstoque());
            stmt.setString(8, movimentacaoEstoque.getStatusMovimentacaoEstoque().toUpperCase());
            stmt.setInt(9, movimentacaoEstoque.getIdMovimentacaoEstoque());
            stmt.executeUpdate();
            return true;
        } catch (SQLException ex) {
            System.out.println("Problemas no SQL ao alterar MovimentacaoEstoque! Erro MovimentacaoEstoqueDAO: " + ex.getMessage());
            return false;
        } finally {
            try {
                ConnectionFactory.closeConnection(conn, stmt);
            } catch (Exception ex) {
                System.out.println("Problemas ao fechar parâmetros de conexão Alterar MovimentacaoEstoque! Erro MovimentacaoEstoqueDAO: " + ex.getMessage());
            }
        }
    }
}
